/*
 * global.cpp
 *
 *  Created on: 11 mars 2011
 *      Author: Julien
 */

#include <pthread.h>
#include <iostream>
#include "defines.h"

using namespace std;

// On tolère jusqu'à 100 threads de chaque type dans l'application
pthread_t thread_application[NB_TYPE_THREADS][100];

int index[NB_TYPE_THREADS];
bool initialise = false;

// Type_thread est de type CONDUCTEUR, RAME...
void ajouterThread(pthread_t thread, int type_thread){
	if (!initialise){
		for (int i = 0; i < NB_TYPE_THREADS ; ++i)
			index[i] = 0;
		initialise = true;
	}

	thread_application[type_thread][index[type_thread]] = thread;
	++index[type_thread];
	cout << "Thread de type " << type_thread << " enregistré " << endl;
}

int getNbThreads(int typeThread){
	return index[typeThread];
}

pthread_t* getConducteur(int numero){
	return &(thread_application[CONDUCTEUR][numero]);
}

pthread_t* getPassager(int numero){
	return &(thread_application[PASSAGER][numero]);
}

pthread_t* getRame(int numero){
	return &(thread_application[RAME][numero]);
}

void attendreTerminaison(){
	// On attend la fin de tous les threads
	for(int i=0; i<NB_TYPE_THREADS; i++){
		for (int j = 0; j < 100; j++)
			if(pthread_join(thread_application[i][j],0)!=0){
				cout << "/!\\ Echec attente de terminaison du thread de type " << i << " numéro " << j << "/!\\"<< endl;
		}
	}
}
